import 'dart:io';

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_module/tool/userManager.dart';
import 'package:dio/native_imp.dart';

// Dio 是一个拥有factory 构造函数的接口类，因此不能直接继承 Dio ，但是可以通过 DioForNative 或DioForBrowser 来间接实现:
class NetRequest extends DioForNative {
  
  NetRequest([bool authorization=true,BaseOptions options]):super(options) {
    if (options == null) {
      options = BaseOptions();
      options.baseUrl = 'http://yd.yunding360.com:80/app/api/';
      Map<String,dynamic> headers = {};
      headers['api-version'] = 'v1';
      if(authorization == true){
        if (UserManager().userInfo.accessToken != null) {
          String authorization = UserManager().userInfo.tokenType+UserManager().userInfo.accessToken;
          headers['Authorization'] = authorization;
        }
      }
      print(headers);
      options.headers = headers;
      interceptors.add(InterceptorsWrapper(
          onRequest:(RequestOptions options){
          // 在请求被发送之前做一些事情
          return options; //continue
          // 如果你想完成请求并返回一些自定义数据，可以返回一个`Response`对象或返回`dio.resolve(data)`。
          // 这样请求将会被终止，上层then会被调用，then中返回的数据将是你的自定义数据data.
          //
          // 如果你想终止请求并触发一个错误,你可以返回一个`DioError`对象，或返回`dio.reject(errMsg)`，
          // 这样请求将被中止并触发异常，上层catchError会被调用。
          },onResponse:(Response response) {
          // 在返回响应数据之前做一些预处理
          
          return response; // continue
          },onError: (DioError e) {
            // 当请求失败时做一些预处理
            print(e);
          return e;//continue
          }
      ));

      this.options = options;
    }
  }

}